// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    "break" within a "while" Statement is allowed and performed as described
    in 12.8
es5id: 12.6.2_A4_T2
description: "\"break\" and VariableDeclaration within a \"while\" Statement"
---*/

function Test() {
    do_out : while(1===1) {
        if (__in__do__before__break) break;
        var __in__do__before__break="black";
        do_in : while (1) {
            var __in__do__IN__before__break="hole";
            break do_in; 
            var __in__do__IN__after__break="sun";
        } ;
        var __in__do__after__break="won't you come";
    };

//////////////////////////////////////////////////////////////////////////////
//CHECK#1
    if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) {
    	throw new Test262Error('#1: Break inside do-while is allowed as its described at standard');
    }
//
//////////////////////////////////////////////////////////////////////////////
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
